<?php
class ReciboCobranzasController extends AppController {

    var $name = 'ReciboCobranzas';
    var $appModule = 'Facturacion';
    var $helpers = array('Html', 'Form', 'Javascript', 'Number', 'Time', 'Codigo','GetList','AdcReporter');
    var $components = array('RequestHandler', 'Formating');
    var $uses = array('ReciboCobranza','DocumentoVenta', 'CuentaCorrienteCobrar','Alumno');

    public function resumen_creditos($date = null, $nivel_id = 0, $grado_id = 0, $seccion = ''){
        if (isset($this->params['url']['fecha'])) $date = $this->params['url']['fecha'];
        if (empty($date)) $date = str_replace('/','-',$this->fechaTrabajo());
        
        if (isset($this->params['url']['nivel_id'])) $nivel_id = $this->params['url']['nivel_id'];
        if (isset($this->params['url']['grado_id'])) $grado_id = $this->params['url']['grado_id'];
        if (isset($this->params['url']['seccion'])) $seccion = strtoupper($this->params['url']['seccion']);
        
        
       	$this->reporte_html();
        set_time_limit(0);
	$fecha_inicial = '01-01-'.$_SESSION['Ejercicio']['codigo'];
        $titulo = '';
        $where1 = '';//NIVEL
        $where2 = '';//GRADO
        $where3 = '';//SECCION
        
        if($nivel_id <> 0){
           $where1 = ' AND a.nivel_id = ' .$nivel_id;
        }
        if($grado_id<> 0){
           $where2 = ' AND a.grado_id = ' .$grado_id;
        }
        if($seccion<> '' ){
           $where3 = ' AND a.seccion = \'' .$seccion.'\'';
        }        

        $sql = 'SELECT
                    dv.id AS "DocumentoVenta__id",
                    dv.numero_control AS "DocumentoVenta__numero_control",
                    dv.numero_documento AS "DocumentoVenta__numero_documento",    
                    dv.familia_id AS "DocumentoVenta__cliente_id",
                    a.codigo AS "Cliente__codigo",
                    t.razon_social AS "DocumentoVenta__nombre_cliente",    
                    dv.codigo_documento_id AS "DocumentoVenta__codigo_documento_id",
                    dv.fecha_emision AS "DocumentoVenta__fecha_emision",
                    dv.fecha_pago AS "DocumentoVenta__fecha_pago",    
                    dv.suma_importe_total AS "DocumentoVenta__suma_importe_total",
                    (\'%1$s\' - fecha_emision) AS "DocumentoVenta__dias",
                    cc.saldo AS "DocumentoVenta__saldo",
                    case a.nivel_id WHEN 1 THEN \'INICIAL\' when 2 then \'PRIMARIA\' WHEN 3 THEN \'SECUNDARIA\' END  AS "Alumno__nivel_id",
                    a.grado_id  AS "Alumno__grado_id",
                    a.seccion AS "Alumno__seccion",
                    dv.glosa as "DocumentoVenta__glosa"
                    FROM facturacion.documento_ventas dv
                    LEFT JOIN apafa.familias f on f.id = dv.familia_id
                    LEFT JOIN apafa.alumnos a on a.id = f.alumno_id
                    LEFT JOIN maestros.terceros t on t.id = a.id
                    LEFT JOIN (
                        SELECT 
                            cc.codigo_documento_id,
                            cc.documento_venta_id,
                            max(cc.numero_documento) numero,
                            SUM(
                                CASE WHEN cc.tipo_operacion_cc_id=1 THEN cc.tipo_cambio*cc.importe
                                ELSE cc.tipo_cambio*cc.importe*-1 END ) saldo
                        FROM facturacion.cuenta_corriente_cobrars cc
                        WHERE
                          cc.centro_dist_id = 51 AND cc.codigo_documento_id IN (101,103,108)
                            AND cc.fecha <= \'%1$s\'
                       GROUP BY
                          cc.codigo_documento_id,cc.documento_venta_id
                       HAVING
                          SUM(
                              CASE WHEN cc.tipo_operacion_cc_id=1 THEN cc.tipo_cambio*cc.importe
                              ELSE cc.tipo_cambio*cc.importe*-1 END )<>0  ) cc ON cc.documento_venta_id = dv.id	AND cc.codigo_documento_id = dv.codigo_documento_id
                WHERE
                    (dv.estado_cc_id = 0 OR dv.estado_cc_id IS NULL) AND 
                    dv.fecha_emision <= \'%1$s\' AND
                    (dv.fecha_cancelacion > \'%1$s\' OR dv.fecha_cancelacion IS NULL) AND
                    dv.activo = true AND dv.anulado = false AND dv.impreso = true AND
                    cc.saldo is not NULL AND dv.fecha_emision <> dv.fecha_pago  AND 
                    dv.empresa_id = %2$s AND dv.centro_dist_id = %3$s
                    %4$s %5$s %6$s
                ORDER BY a.nivel_id asc, a.grado_id, a.seccion, t.razon_social,dv.fecha_emision asc ';
        // echo'<pre>';print_r(sprintf($sql,$date,$where1,$where2,$orderAll,$where3, $where4, $where5,$esPaneton, $union));die;
        $documentos = $this->DocumentoVenta->query(sprintf($sql,$date,$this->empresaId(), $this->centroDistId() , $where1,$where2,$where3));
        foreach($documentos as &$docu){
                if($type==6)
                        $docu['DocumentoVenta']['suma_importe_total'] = $docu['DocumentoVenta']['suma_importe_total'] + $docu['DocumentoVenta']['suma_percepcion'];
        }
        //print_r($this->params);die('');
        $this->set(compact('documentos','type','date','from','to','titulo','rango'));
    }
        
    public function tarjeta_credito_historica($cliente = null, $aolo_pendiente = false){
        set_time_limit(0);
        $empresa= $this->empresaId();
        $centro	= $this->centroDistId();
		
        if (!empty($cliente)){
            $cliente = $this->Alumno->find('first',array(
                            'fields'=>array('Alumno.id','Tercero.razon_social'),
                            'conditions'=>array(
                                'Tercero.centro_dist_id'=>$this->centroDistId(),
                                'Alumno.codigo'=>$cliente,
                                'Alumno.activo'=>true
                            ),
                            'contain'=>array('Tercero')
                        ));
            $clienteId= $cliente['Alumno']['id'];
            $nombre = $cliente['Tercero']['razon_social'];
        }

        $sql = '
            SELECT
                dv.id AS "DocumentoVenta__id",
                CASE WHEN cc.tipo_operacion_cc_id = 1 THEN dv.id ELSE 0 END AS "DocumentoVenta__detalle_id",
                dv.codigo_documento_id AS "DocumentoVenta__codigo_documento_id",
                dv.numero_documento AS "DocumentoVenta__numero_documento",
                dv.fecha_emision AS "DocumentoVenta__fecha_emision",
                a.id AS "Cliente__id",       
                a.codigo AS "Cliente__codigo", 
                t.razon_social AS "Cliente__nombre_cliente",
                cc.id AS "CuentaCorriente__id",  
                cc.fecha AS "CuentaCorriente__fecha_abono",  
                cc.codigo_documento_relacionado_id AS "CuentaCorriente__codigo_documento_id",
                cc.tipo_operacion_cc_id AS "CuentaCorriente__tipo_operacion_cc_id",
                cc.numero_documento_relacionado AS "CuentaCorriente__numero_documento",                                 
                CASE WHEN cc.tipo_operacion_cc_id = 1 THEN cc.importe_mn ELSE 0 END AS "CuentaCorriente__cargo",
                CASE WHEN cc.tipo_operacion_cc_id = 2 THEN cc.importe_mn ELSE 0 END AS "CuentaCorriente__abono",
                0 AS "CuentaCorriente__saldo" ,
                dv.glosa as "DocumentoVenta__glosa"
            FROM facturacion.cuenta_corriente_cobrars cc
            LEFT JOIN facturacion.documento_ventas dv ON (dv.id = cc.documento_venta_id AND dv.codigo_documento_id=cc.codigo_documento_id)
            LEFT JOIN apafa.familias f on f.id = dv.familia_id
            LEFT JOIN apafa.alumnos a on a.id = f.alumno_id
            LEFT JOIN maestros.terceros t on t.id = a.id
            WHERE 
                    cc.empresa_id = %s
                    AND cc.centro_dist_id =  %s
                    AND a.id =  %s                    
            ORDER BY 
                      "DocumentoVenta__fecha_emision" ASC,
                      "DocumentoVenta__numero_documento" ASC,                                 
                      "CuentaCorriente__fecha_abono" ASC,
                      "CuentaCorriente__tipo_operacion_cc_id" ASC,
                      "CuentaCorriente__id" ASC ';
        $documento = $this->DocumentoVenta->query(sprintf($sql, $empresa, $centro, $clienteId));//, $order));
        $data = array();
        $detalles = array();
        $cuentaId = '';
        foreach($documento as $doc){
            if($cuentaId!=$doc['CuentaCorriente']['id']){
                $string['DocumentoVenta']   = $doc['DocumentoVenta'];
                $string['Cliente']          = $doc['Cliente'];
                $string['CuentaCorriente']  = $doc['CuentaCorriente'];
                $string['DocumentoVentaDetalle'] = '';
                $data[] = $string;	
            }		
            $cuentaId = $doc['CuentaCorriente']['id'];
        }

        $codigo= '';
        $saldo = 0;	
        $saldoDolar = 0;
        $tmp = '';
        $cancelados = array(); 
        foreach($data as &$d){
                $_key = $d['DocumentoVenta']['id'].$d['DocumentoVenta']['numero_documento'];
                if($_key != $tmp){
                    $saldo =$saldoDolar = 0;
                }                
                $tmp = $d['DocumentoVenta']['id'].$d['DocumentoVenta']['numero_documento'];                
                
                if($d['CuentaCorriente']['tipo_operacion_cc_id']==1){
                    if($d['CuentaCorriente']['codigo_documento_id']==205 && $d['CuentaCorriente']['tipo_operacion_cc_id']==1){
                        $d['CuentaCorriente']['saldo']+=$saldo+$d['CuentaCorriente']['cargo'];                        
                    }else{
                        $d['CuentaCorriente']['saldo'] = $saldo +$d['CuentaCorriente']['cargo'];                        
                    }
                } elseif($d['CuentaCorriente']['tipo_operacion_cc_id'] == 2){
                    $cod = $d['DocumentoVenta']['id'].$d['DocumentoVenta']['numero_documento'];
                    if($cod == $codigo){                        
                        if($d['CuentaCorriente']['tipo_operacion_cc_id'] == '1'){
                            $d['CuentaCorriente']['saldo'] += $saldo + $d['CuentaCorriente']['cargo'];                            
                        } else {
                            $d['CuentaCorriente']['saldo'] += $saldo-$d['CuentaCorriente']['abono'];                            
                        }                        
                        $d['CuentaCorriente']['cargo'] = '';                        
                        $numero = empty($d['CuentaCorriente']['numero_documento'])?$d['DocumentoVenta']['numero_documento']:$d['CuentaCorriente']['numero_documento'];
                        $d['CuentaCorriente']['numero_documento'] = $numero;
                    }else{                         
                        $d['CuentaCorriente']['saldo'] = $saldo+$d['CuentaCorriente']['cargo']-$d['CuentaCorriente']['abono'];
                    }
                }		

                $saldo  = $d['CuentaCorriente']['saldo'];                
                $codigo = $d['DocumentoVenta']['id'].$d['DocumentoVenta']['numero_documento'];
                if(round($saldo) == 0 ){
                    $cancelados[] = $codigo;
                }
                $d['CuentaCorriente']['codigo_documento_id'] = empty($d['CuentaCorriente']['codigo_documento_id'])?'':$d['CuentaCorriente']['codigo_documento_id'];                
        }
        if($aolo_pendiente){
            $values = array();
            foreach($data as $item){
                $key = $item['DocumentoVenta']['id'].$item['DocumentoVenta']['numero_documento'];
                if(!in_array($key, $cancelados)){
                    $values[] = $item;
                }            
            }
            $data = $values;
        }
        $this->reporte_html();
        $this->set(compact('data','detailed','from','to','dolar','nombre'));
    }
    
    public function saldo_cliente($date = null, $nivel_id = 0, $grado_id = 0, $seccion = ''){
        if (isset($this->params['url']['fecha'])) $date = $this->params['url']['fecha'];
        if (empty($date)) $date = str_replace('/','-',$this->fechaTrabajo());
        
        if (isset($this->params['url']['nivel_id'])) $nivel_id = $this->params['url']['nivel_id'];
        if (isset($this->params['url']['grado_id'])) $grado_id = $this->params['url']['grado_id'];
        if (isset($this->params['url']['seccion'])) $seccion = strtoupper($this->params['url']['seccion']);
        
        
       	$this->reporte_html();
        set_time_limit(0);
	$fecha_inicial = '01-01-'.$_SESSION['Ejercicio']['codigo'];
        $titulo = '';
        $where1 = '';//NIVEL
        $where2 = '';//GRADO
        $where3 = '';//SECCION
        
        if($nivel_id <> 0){
           $where1 = ' AND a.nivel_id = ' .$nivel_id;
        }
        if($grado_id<> 0){
           $where2 = ' AND a.grado_id = ' .$grado_id;
        }
        if($seccion<> '' ){
           $where3 = ' AND a.seccion = \'' .$seccion.'\'';
        }        

        $sql = 'SELECT                    
                    dv.familia_id AS "DocumentoVenta__cliente_id",
                    a.codigo AS "Cliente__codigo",
                    t.razon_social AS "DocumentoVenta__nombre_cliente",                    
                    case a.nivel_id WHEN 1 THEN \'INICIAL\' when 2 then \'PRIMARIA\' WHEN 3 THEN \'SECUNDARIA\' END  AS "Alumno__nivel_id",
                    a.grado_id  AS "Alumno__grado_id",
                    a.seccion AS "Alumno__seccion",
                    sum(cc.saldo) AS "DocumentoVenta__saldo"
                FROM facturacion.documento_ventas dv
                    LEFT JOIN apafa.familias f on f.id = dv.familia_id
                    LEFT JOIN apafa.alumnos a on a.id = f.alumno_id
                    LEFT JOIN maestros.terceros t on t.id = a.id
                    LEFT JOIN (
                        SELECT 
                            cc.codigo_documento_id,
                            cc.documento_venta_id,
                            max(cc.numero_documento) numero,
                            SUM(
                                CASE WHEN cc.tipo_operacion_cc_id=1 THEN cc.tipo_cambio*cc.importe
                                ELSE cc.tipo_cambio*cc.importe*-1 END ) saldo
                        FROM facturacion.cuenta_corriente_cobrars cc
                        WHERE
                          cc.centro_dist_id = 51 AND cc.codigo_documento_id IN (101,103,108)
                            AND cc.fecha <= \'%1$s\'
                       GROUP BY
                          cc.codigo_documento_id,cc.documento_venta_id
                       HAVING
                          SUM(
                              CASE WHEN cc.tipo_operacion_cc_id=1 THEN cc.tipo_cambio*cc.importe
                              ELSE cc.tipo_cambio*cc.importe*-1 END )<>0  ) cc ON cc.documento_venta_id = dv.id	AND cc.codigo_documento_id = dv.codigo_documento_id
                WHERE
                    (dv.estado_cc_id = 0 OR dv.estado_cc_id IS NULL) AND 
                    dv.fecha_emision <= \'%1$s\' AND
                    (dv.fecha_cancelacion > \'%1$s\' OR dv.fecha_cancelacion IS NULL) AND
                    dv.activo = true AND dv.anulado = false AND dv.impreso = true AND
                    cc.saldo is not NULL AND dv.fecha_emision <> dv.fecha_pago  AND 
                    dv.empresa_id = %2$s AND dv.centro_dist_id = %3$s
                    %4$s %5$s %6$s
                GROUP BY 
                    dv.familia_id,
                    a.codigo,
                    t.razon_social,                    
                    case a.nivel_id WHEN 1 THEN \'INICIAL\' when 2 then \'PRIMARIA\' WHEN 3 THEN \'SECUNDARIA\' END,
                    a.grado_id,
                    a.seccion
                ORDER BY case a.nivel_id WHEN 1 THEN \'INICIAL\' when 2 then \'PRIMARIA\' WHEN 3 THEN \'SECUNDARIA\' END asc, 
                    a.grado_id, a.seccion, t.razon_social';
        // echo'<pre>';print_r(sprintf($sql,$date,$where1,$where2,$orderAll,$where3, $where4, $where5,$esPaneton, $union));die;
        $documentos = $this->DocumentoVenta->query(sprintf($sql,$date,$this->empresaId(), $this->centroDistId() , $where1,$where2,$where3));        
        $this->set(compact('documentos','type','date','from','to','titulo','rango'));
    }

    function flujo_caja($fecha = null){
       $fecha = empty($fecha)?$this->fechaTrabajo():$fecha;
        $sql = '
                    select 
                        rcd.codigo_documento_ref_id "ReciboCobranza__codigo_documento_ref_id",
                        dv.numero_documento         "ReciboCobranza__dv.numero_documento",
                        a.codigo                    "ReciboCobranza__codigo_alumno",
                        tc.razon_social             "ReciboCobranza__alumno",
                        rcd.abono                   "ReciboCobranza__abono"
                    from facturacion.recibo_cobranza_detalles rcd 
                    left join facturacion.recibo_cobranzas rc on rc.id = rcd.recibo_cobranza_id
                    left join facturacion.documento_ventas dv on dv.id = rcd.documento_referencia_id
                    left join apafa.alumnos a on a.id  = rc.alumno_id
                    left join maestros.terceros tc on tc.id = a.id
                    where 
                        rc.activo
                    and rc.anulado = false
                    and rc.fecha = \'%s\'
                ';
        
        $cobranza = $this->ReciboCobranza->query(sprintf($sql,$fecha));
                
        $sql = '
                select 
                    dc.codigo_documento_id "DocumentoCompra__codigo_documento_id",
                    dc.numero_documento     "DocumentoCompra__numero_documento",
                    p.codigo                "DocumentoCompra__codigo_proveedor",
                    tc.razon_social         "DocumentoCompra__proveedor",
                    dc.suma_importe_total   "DocumentoCompra__suma_importe_total"
                from logistica.documento_compras dc
                left join maestros.terceros tc on tc.id = dc.proveedor_id
                left join logistica.proveedores p on p.id = dc.proveedor_id
                where
                    dc.activo 
                and dc.anulado = false 
                and dc.fecha_emision = \'%s\'
                ';
        
        $compras = $this->ReciboCobranza->query(sprintf($sql,$fecha));
        
        $this->reporte_html();
        
        $this->set(compact('cobranza','compras'));
        $this->set('fecha', $fecha);
        
    }
    
}
?>